home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / 3dvect39 / fx.asm < prev    next >
Assembly Source File  |  1994-10-30  |  4KB  |  142 lines

  1. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  2. ; Simple Sound FX routines - uses GUS.ASM routines, works on GUS and crappy SB
  3. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  4.  
  5.         .386p
  6. code32  segment para public use32
  7.         assume cs:code32, ds:code32
  8.  
  9.         include pmode.ext
  10.         include gus.ext
  11.         include irq.ext
  12.         include file.ext
  13.  
  14.         public _vcstarts
  15.         public _load_sams
  16.         public _play_sample
  17.         public _load_lib
  18.  
  19. _vcstarts dd 40 dup (0) ; sample start locations (next is end) no maxmimum # of samples
  20.  
  21. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  22. ; Play sample
  23. ; In:
  24. ;   AX = sample # to play
  25. ;   DL = channel (0-31)
  26. ;   BL = volume  (0-15)
  27. ;   BH = pan     (0-8)
  28. ;   CL = voice control (loop and stuff, usually 0)
  29. ;   CH = precalculated frequency (0-59)
  30. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  31.  
  32. _play_sample:
  33.         movzx eax,ax
  34.         movzx edx,dl
  35.  
  36.         mov edi,[_vcstarts+eax*4]
  37.         mov ebp,[_vcstarts+4+eax*4]
  38.         sub ebp,2
  39.  
  40.         mov _vcsbeg[edx*4],edi
  41.         mov _vclbeg[edx*4],edi
  42.         mov _vclend[edx*4],ebp
  43.  
  44.         mov _vcpan+[edx],bh
  45.         mov _vcvol+[edx],bl
  46.         movzx eax,ch
  47.         mov ax,_freqtbl[eax*2]
  48.         mov _vcfreq[edx*2],ax
  49.         mov _vccntrl[edx],cl
  50.         mov _vccmnd[edx],play  ; command comes last
  51.         ret
  52.  
  53. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  54. ; Load samples from DOS (8bit, unsigned)
  55. ; In:
  56. ;  EDI => ASCIIZ list of samples to load
  57. ;  EDX => Buffer (must be able to contain largest sample)
  58. ; Out:
  59. ;  EBP = number of samples loaded
  60. ;   CF = 1 files not found/failed
  61. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  62.  
  63. _load_sams:
  64.         xor ebp,ebp
  65.         mov eax,_sfxmem
  66.         mov _vcstarts,eax
  67. lsloop:
  68.         push edx
  69.         mov edx,edi
  70.         call _openfile
  71.         pop edx
  72.         jc lserr
  73.  
  74.         call _filesize
  75.         mov ecx,eax
  76.         add eax,_sfxmem
  77.         mov _vcstarts[ebp*4+4],eax
  78.         call _readfile
  79.  
  80.         mov ebx,_sfxmem
  81.         call _sfx_putram
  82.         add _sfxmem,ecx
  83.  
  84.         call _closefile
  85.         inc ebp
  86.         xor al,al
  87.         mov ecx,64
  88.         repnz scasb
  89.         jcxz lserr
  90.         cmp byte ptr [edi],0
  91.         jne lsloop
  92.  
  93.         clc
  94.         ret
  95. lserr:
  96.         stc
  97.         ret
  98.  
  99. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  100. ; Load samples from WAD (8bit, unsigned)
  101. ; In:
  102. ;  EDI => LSEEKFILE Offset and Length of samples to load
  103. ;  EDX => Buffer (must be able to contain largest sample)
  104. ;  ECX => number of samples to load
  105. ; Out:
  106. ;  EBP = number of samples loaded
  107. ;   CF = 1 files not found/failed
  108. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  109.  
  110. _load_lib:
  111.         xor ebp,ebp
  112.         mov eax,_sfxmem
  113.         mov _vcstarts,eax
  114.         xchg ecx,edi
  115. libloop:
  116.         xor bl,bl
  117.         mov eax,[ecx]
  118.         call _lseekfile
  119.         jc qerex
  120.         mov ebx,[ecx+4]
  121.         add ecx,8
  122.         mov esi,_sfxmem
  123.         mov _vcstarts[ebp*4+4],esi
  124.         add _vcstarts[ebp*4+4],ebx
  125.         xchg ecx,ebx
  126.         call _readfile                      ; edx = loc, ecx = len, ebx = build
  127.         xchg esi,ebx
  128.         call _sfx_putram
  129.         add _sfxmem,ecx
  130.         xchg esi,ecx
  131.         inc ebp
  132.         dec edi
  133.         jnz libloop
  134.  
  135.         clc
  136. qerex:
  137.         call _closefile
  138.         ret
  139.  
  140. code32  ends
  141.         end
  142.